{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 02 Drake中的一些概念\n",
    "\n",
    "Drake软件包含了三个主要部分：\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 动态系统建模\n",
    "\n",
    "动态系统建模需要对一个动态系统进行表示，并根据真实物理特性进行仿真。\n",
    "\n",
    "### 系统\n",
    "\n",
    "Drake对系统的建模类似Simulink。\n",
    "Drake是从称为system的模块构建复杂系统。\n",
    "system具有输入和输出端口，可以与其他系统进行连接。\n",
    "system模块可以是一个框图（diagram）或者叶子系统（leafsystem）。\n",
    "其中，叶子系统是最小的构建模块，而框图由多个叶子系统或框图构成。\n",
    "\n",
    "叶子系统是机器人系统中的基本部件，例如信号、传感器、控制器、平台等。\n",
    "\n",
    "### 框图\n",
    "\n",
    "### 上下文\n",
    "\n",
    "上下文（context）是系统状态和参数的数据，保存在一个独立的地方。\n",
    "每个框图和系统都有自己的上下文。\n",
    "在仿真中，仿真器（simulator）只需要上下文和框图就可以进行仿真。\n",
    "给定上下文后，系统调用的所有方法就都是确定和可重复的。\n",
    "\n",
    "Drake有一个方法\n",
    "diagram->CreateDefaultContext()\n",
    "能为所有的子系统创建默认数值的上下文。\n",
    "在仿真开始之前，使用上下文可以直接设置如初始状态和初始时间等参数。\n",
    "\n",
    "![](./images/diagram.png)\n",
    "\n",
    "上下文中可包含连续状态、离散状态和抽象变量。\n",
    "基于变量的类型，仿真器将通过数值积分或状态方程更新来更新其中的数据。\n",
    "\n",
    "### 仿真\n",
    "\n",
    "Drake是一个仿真软件。\n",
    "【我原来觉得Drake是一个建模、分析和设计软件，但从最优和预测控制的角度，具有更好仿真】\n",
    "\n",
    "\n",
    "\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 求解数学程序\n",
    "\n",
    "Drake结合被广泛使用的优化工具，例如Gurobi、SNOPT、IPOPT、SCS、MOSEK。\n",
    "Drake将这些工具用于机器人学中的数学问题求解，特别是规划和控制。\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 多体平台的运动学和动力学\n",
    "\n",
    "多体平台是多个刚体按树形结构连接。\n",
    "对机器人系统来说，根框图有一个独立的叶子系统，称为MultibodyPlant。\n",
    "MultibodyPlant内部使用刚体树算法对机器人的运动学和动力学进行计算。\n",
    "\n",
    "MultibodyPlant是一个系统。因此有输入和输出端口，可以连接控制器和显示器。\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Drake中使用的工具\n",
    "\n",
    "- Eigen\n",
    "\n",
    "- LCM\n",
    "\n",
    "- Tinyxml2\n",
    "\n",
    "- VTK"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.11"
  },
  "toc-autonumbering": true
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
